//
//  MLHomeTableViewController.swift
//  SinaWeibo
//
//  Created by 李亮亮 on 16/4/6.
//  Copyright © 2016年 Big Fish. All rights reserved.
//

import UIKit
import SVProgressHUD

private let HomeCell = "HomeCell"

class MLHomeTableViewController: MLVisitorTableViewController {
    
    // tableView对应的视图模型
    private lazy var statusListViewModel: MLStatusListViewModel = MLStatusListViewModel()
    // 自定义下拉刷新控件
    let myRefresh = MLRefreshControl()
    
    // 模型数组
    
    // 视图层次结构已经准备完毕
    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置界面
        setupUI()
        // 加载数据
        loadData()
        
    }
    
    func setupUI() {
        if !userLogin {
        // 设置访客视图信息
        visitorView?.setVisitorInfo("关注一些人,回到这里看看有什么惊喜", imageName: "visitordiscover_feed_image_smallicon", isHome: true)
            return
        }
        // 设置导航条上的自定义按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: nil, imageName: "navigationbar_pop", target: self, action:"push")
        navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: nil, imageName: "navigationbar_friendsearch", target: self, action: "push")
        
        prepareForTableView()
        
    }
    
    private func prepareForTableView() {
        //注册cell
        tableView.registerClass(MLStatusCell.self, forCellReuseIdentifier: HomeCell)
        
        //设置tableViewCell的固定高度为
        //1.设置行高为自动计算
        tableView.rowHeight = UITableViewAutomaticDimension
        //2.设置预估行高  ==> 通过预估行高 给tableView计算 contentSize  -> tableView才可以滚动  -> 减少 tableView行高的计算
        tableView.estimatedRowHeight = 300
        //设置分割线
        tableView.separatorStyle = .None
        
        tableView.tableFooterView = indicatorView
        
        refreshControl = UIRefreshControl()
        //添加监听事件
        myRefresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        tableView.addSubview(myRefresh)
        
    }
    
    private func push() {
        // 进入子页面
        let temp = MLTempViewController()
        // push到子页面
        navigationController?.pushViewController(temp, animated: true)
    }
    
    private func loadData() {
        // 使用ViewModel请求数据
        statusListViewModel.loadHomagePageData(indicatorView.isAnimating()) { (isSuccess) -> () in
            //不管成功还是失败都是应该停止refreshControl的转动 并且回到最顶部
            self.refreshControl?.endRefreshing()
            
            if !isSuccess {
                SVProgressHUD.showErrorWithStatus("失败")
                return
            }
            
            //停止菊花的转动
            self.indicatorView.stopAnimating()
            // 刷新视图
            self.tableView.reloadData()
        }
    }
    
    
    private lazy var indicatorView: UIActivityIndicatorView = {
        let v = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        //        v.startAnimating()
        return v
    }()

}


// MARK: - 实现数据源&协议方法
extension MLHomeTableViewController {
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusArray.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCell, forIndexPath: indexPath) as! MLStatusCell
        
        cell.statusCellViewModel = statusListViewModel.statusArray[indexPath.row]
        
        //添加一个标记 如果正在上拉操作就不执行以下分支
        //正在加载最后一个cell 并且 小菊花没有转动
        if  !indicatorView.isAnimating() && indexPath.row == statusListViewModel.statusArray.count - 1 {
            //表示正在加载最后一个cell
            //转动小菊花
            indicatorView.startAnimating()
            //loadData   如果将loadData放在菊花转动前面,会造成死循环加载数据
            loadData()
        }
        
        return cell
    }
    
}



